Storage systems, from embedded to datacenter, utilize storage media (or “memory”) to store user data written to the system and to retrieve that data on a user's request. Storage systems can be homogeneous, built from the uniform storage media with the same access and/or endurance characteristics, or heterogeneous, comprising multiple media types as distinguished by their latency, throughput, endurance or other performance factors. Some storage schemes try to improve storage efficiency by organizing media of the same type into tiers, with each tier characterized by its underlying media type-specific features. For example, in personal computer systems, dynamic random access memory (“DRAM”) provides very quick access but does not retain data once power is removed, whereas a hard disk drive (“HDD”) provides relatively slow access compared to DRAM but retains data once power is removed; some systems thus try to store frequently used/overwritten data in DRAM, for quick access and performance while the computer is in active use, and to store data that is less frequently needed or where slower input/output performance can be tolerated in slower memory, such as an HDD.
Note that while data type (e.g., frequently updated operating parameters, read-only data and so forth) provides one relatively straightforward example of data that can be organized into different tiers, there exist many situations where data type is unclear, or where characteristics associated with the data and its associated logical address (e.g., “context”) are not clearly and immediately understood by the host or the storage system. A block of data found at a random physical memory location might have no clearly delineated “file type” that can be understood, without more information, by a processor. This is especially the case for storage systems which rely on address translation to store and access data at a physical location that is unknown to the host (e.g., that use virtual and/or logical-to-physical translation, or that otherwise use a log-structured or copy on write file system). Thus, even if data could ultimately be traced back to its source application to understand context of data, without special processes for performing this tracing, the context of data cannot be readily understood by a host or memory controller.
What is needed are techniques for more efficiently managing operation of memory and, more specifically, of providing context to a host, memory controller or another device in a manner that does not require extensive host mechanisms for tracking context. The present invention addresses these needs and provides further, related advantages.
The subject matter defined by the enumerated claims may be better understood by referring to the following detailed description, which should be read in conjunction with the accompanying drawings. This description of one or more particular embodiments, set out below to enable one to build and use various implementations of the technology set forth by the claims, is not intended to limit the enumerated claims, but to exemplify their application to certain methods and devices. The description set out below exemplifies methods supporting the tracking of context information in a memory system, using back references or other “context information” written by a host together with data, for optional use in data migration. More specifically, storing sufficient context metadata together with underlying data permits a nonvolatile memory controller (e.g., as the need for maintenance arises) to provide stored “handles” for that underlying data to a host and thus update host file references and/or manage data migration (e.g., for wear leveling, garbage collection or other purposes) in a manner where destination address can be specifically selected in a manner planned for efficiency purposes. Such stored context metadata can potentially be used for other applications as well. Disclosed techniques can be practiced in one embodiment by a host, in another embodiment by a memory controller (e.g., within a single drive), and in a third embodiment by one or more hosts cooperating with one or more memory controllers. This disclosure also provides improved designs for a memory controller, a host, a memory system, a subsystem (such as a drive, e.g., a solid state drive or “SSD”), and numerous data management methods. The disclosed techniques can also be implemented in software or instructions for fabricating an integrated circuit (e.g., a circuit design file or field programmable gate array or “FPGA” configuration) or in the form of data arranged dependent on wear in non-transitory memory. While the specific examples are presented, particularly in the context of flash memory, the principles described herein may also be applied to other methods, devices and systems as well.